#ifndef __USER_APP_H
#define __USER_APP_H

#include "main.h"
#include "string.h"
#include "stdio.h"
// #define VERSION_NUMBER "Fishbowl_V101" // 增加自动补水功能
// #define VERSION_NUMBER "Fishbowl_V102" // 修复 自动补水功能 的一些Bug
// #define VERSION_NUMBER "Fishbowl_V103" // 修复 自动补水功能 超时不能用Bug。增加超时后退出 自动补水功能
// #define VERSION_NUMBER "Fishbowl_V104" // 增加排水泵手动控制。修改 自动补水 补水时间
// #define VERSION_NUMBER "Fishbowl_V105" // 增加自动换水功能
#define VERSION_NUMBER "Fishbowl_V200" // 适应新驱动板 YG_M_V101

#define PWM_CIRCULATE_PUMP_GPIO OUTPUT_01_GPIO_Port, OUTPUT_01_Pin

// Flash 掉电保存 地址
#define FLASH_BREW_WATER_TIMER 0x01 // 困水时间
#define FLASH_ADD_WATER_TIMER 0x02  // 补水时间 天
// #define FLASH_TIMER_YEAR 0x02              // 时间_年
// #define FLASH_TIMER_MOON 0x03              // 时间_月
// #define FLASH_TIMER_DAY 0x04               // 时间_日
// #define FLASH_TIMER_HOUR 0x05              // 时间_时
// #define FLASH_TIMER_MINUTE 0x06            // 时间_分
// #define FLASH_TIMER_SECONDS 0x07           // 时间_秒
// #define FLASH_TIMER_WEEK 0x08              // 时间_星期
#define ONE_DAY_MS 86400000 // 60000 // 一天 86400000 ms

typedef struct
{
    struct
    {
        struct
        {
            uint8_t State; // 状态
        } Change_Water_t;  //  自动换水
        struct
        {
            uint8_t State;     // 状态
            uint8_t Timer_Len; // 时长min
        } Brew_Water_t;        //  自动困水
        struct
        {
            uint8_t State;     // 状态
            uint8_t Timer_Len; // 时长 Day天
        } Add_Water_t;         // 自动补水
    } Automatic_Model_t;       // 自动模式
    struct
    {
        struct
        {
            uint8_t State;  // 状态
        } Circulate_Pump_t; // 主循环泵
        struct
        {
            uint8_t State; // 状态
        } Expel_Pump_t;    // 排水泵
        struct
        {
            uint8_t State; // 状态
        } Supply_Pump_t;   // 补水泵
        struct
        {
            uint8_t State; // 状态
        } Oxygen_Pump_t;   // 氧气泵
        struct
        {
            uint8_t State; // 状态
        } Heat_t;          // 加热棒
        struct
        {
            uint8_t State; // 状态
        } Lamp_t;          // 灯光
        struct
        {
            uint8_t State; // 状态
        } Lamp2_t;         // 灯光2

        uint8_t Expel_Position;  // 排水水位
        uint8_t Supply_Position; // 补水水位
        struct
        {
            uint8_t Year;    // 年
            uint8_t Moon;    // 月
            uint8_t Day;     // 日
            uint8_t Hour;    // 时
            uint8_t Minute;  // 分
            uint8_t Seconds; // 秒
            uint8_t Week;    // 星期
        } Timer_t;           // 时间

    } Manual_Model_t;
} info_t;

void User_App(void);
void LED_Run_Debug(void);

#endif
